package util;


/**
 * 
 * @author Team Zilver
 *
 */
public enum Richting {
	
	LINKS(true,false),
	VOOR(true,true),	
	RECHTS(false,false),
	ACHTER(false,true);
	
	private Richting(boolean isLinksOfVooruit, boolean isVooruitOfAchteruit) {
		this.isLinksOfVooruit = isLinksOfVooruit;
		this.isVooruitOfAchteruit = isVooruitOfAchteruit;
	}
	
	public int getIntAlsLinksOfVooruitPositief(int teVeranderen) {
		if(isLinksOfVooruit()) {
			return teVeranderen;
		}
		else {
			return -teVeranderen;
		}
	}
	
	public int getIntAlsRechtsOfAchteruitPositief(int teVeranderen) {
		if(isLinksOfVooruit()) {
			return -teVeranderen;
		}
		else {
			return teVeranderen;
		}
	}
	
	private boolean isLinksOfVooruit() {
		return isLinksOfVooruit;
	}
	
	private boolean isLinksOfVooruit;
	
	public Richting invert() {
		if(isVooruitOfAchteruit())
		{
			if(isLinksOfVooruit()) {
				return VOOR;
			}
			else {
				return ACHTER;
			}
		}
		else
		{
			if(isLinksOfVooruit()) {
		
				return RECHTS;
			}
			else {
				return LINKS;
			}
		}
	}
	
	public boolean isVooruitOfAchteruit() {
		return isVooruitOfAchteruit;
	}
	
	private boolean isVooruitOfAchteruit;

	public int getHoek()
	{
		int hoek = 0;
		
		if(isVooruitOfAchteruit)
			hoek = 90;
		
		hoek = getIntAlsLinksOfVooruitPositief(hoek);
		
		return hoek;
	}
	
	public int getId()
	{
		return this.ordinal();
	}
	
	public Coordinaat roteer(Coordinaat in)
	{
		int x = in.getX();
		int y = in.getY();
		
		//Als niet vooruit of achteruit, 90 naar links
		if(!isVooruitOfAchteruit())
		{
			int temp = y;
			y = x;
			x = -temp;
		}
		
		//Eventueel nog eens 180 draaien
		x = getIntAlsLinksOfVooruitPositief(x);
		y = getIntAlsLinksOfVooruitPositief(y);
		
		return new Coordinaat(x, y);
	}
}
